import axios from "axios";
import store from "@/store";
import { Message } from "element-ui";
import router from "@/router";
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, //请求基地址
  timeout: 20000 //请求超时时间
})
// 请求拦截器
service.interceptors.request.use((config) => {
  // 请求成功注入token
   if(store.getters.token){ //如果有token
    //  设置请求头
    config.headers.Authorization = `Bearer ${store.getters.token}`
   }
   return config
  //  请求失败
} , (error) => {
  return Promise.reject(error) //请求失败直接返回错误对象
})

// 响应拦截器
service.interceptors.response.use((response) => {
  // 判断响应的数据是不是Json格式,如果是Blob格式直接将数据返回,如果是Json格式的数据继续往下进行
  if(response.data instanceof Blob) return response.data
  // 响应成功
  const { message, success, data } = response.data
  // 如果success 为 true
  if(success) {
    return data
    // 否则 直接终止响应，并给出消息提示
  } else { 
    Message({ type: 'error', message })
    return Promise.reject(new Error(message))
  }
} ,async (error) => {
  // 首先解决token超时问题
  if(error.response.status === 401){ //如果响应状态码是401
    await store.dispatch('user/loginOut')//调用actions中的方法,退出登录
    router.push('/login')//跳转到登录页
    Message({ type: 'warning' , message: 'token失效请重新登录' })
    return Promise.reject(error) //终止执行所有操作
  }
 // 响应失败
  Message({ type: 'error', message: error.message })
  return Promise.reject(error)// 响应失败，终止执行，直接返回error错误对象
})
// 将实例导出
export default service